
#ifndef __TRANSFORMATION_PROCESS_H__
#define __TRANSFORMATION_PROCESS_H__

#include <DataUnit.h>
#include <list>

using dataunits::DataUnit;

namespace processes {


class SingleTransformationProcess {
public:
	SingleTransformationProcess() {};
	/**
	 * This method represents a process of DataUnit's transformation.
	 * By the moment, the return value is a pointer to a new instance,
	 * so invoker code must free it when this is no longer needed.
	 */
	virtual DataUnit* process(const DataUnit* dataUnit) =0;
	virtual ~SingleTransformationProcess() {};
};

class BlockTransformationProcess {
public:
	BlockTransformationProcess(){};
	/**
	 * This method represents a process of DataUnit's transformation.
	 * By the moment, the return value is a pointer to a new instance,
	 * so invoker code must free it when this is no longer needed.
	 */
	virtual list<DataUnit*> process(const list<DataUnit*> dataUnits)=0;
	virtual ~BlockTransformationProcess(){};
};


}

#endif // __TRANSFORMATION_PROCESS_H__
